diff --git a/tests/codeigniter/libraries/Form_validation_test.php b/tests/codeigniter/libraries/Form_validation_test.php
index ccdc647..1bbd175 100644
--- a/tests/codeigniter/libraries/Form_validation_test.php
+++ b/tests/codeigniter/libraries/Form_validation_test.php
@@ -9,10 +9,7 @@
 		// Create a mock loader since load->helper() looks in the wrong directories for unit tests,
 		// We'll use CI_TestCase->helper() instead
 		$loader = $this->getMock('CI_Loader', array('helper'));
-		// At current, CI_Form_Validation only calls load->helper("form")
-		// Assert this so that if that changes this fails fast
-		$loader->method('helper')
-				->with($this->equalTo('form'));
+
 		// Same applies for lang
 		$lang = $this->getMock('CI_Lang', array('load'));
 
@@ -31,12 +28,6 @@
 		$this->form_validation = new CI_Form_validation();
 	}
 
-	public function test___construct()
-	{
-		$form_validation = new CI_Form_validation();
-		$this->assertNotNull($form_validation);
-	}	
-
 	public function test_rule_required()
 	{
 		$rules = array(array('field' => 'foo', 'label' => 'foo_label', 'rules' => 'required'));
@@ -47,61 +38,39 @@
 	}
 
 	public function test_rule_matches()
-	{	
+	{
 		$rules = array(
 			array('field' => 'foo', 'label' => 'label', 'rules' => 'required'),
-			array('field' => 'bar', 'label' => 'label2', 'rules' => 'matches[foo]'));
+			array('field' => 'bar', 'label' => 'label2', 'rules' => 'matches[foo]')
+		);
 		$values_base = array('foo' => 'sample');
-		
-		$this->assertTrue($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => ''))
-				));
-		$this->assertTrue($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => 'sample'))
-				));
 
-		$this->assertFalse($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => 'Sample'))
-				));
-		$this->assertFalse($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => ' sample'))
-				));
+		$this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => ''))));
+		$this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => 'sample'))));
+
+		$this->assertFalse($this->run_rules($rules, array_merge($values_base, array('bar' => 'Sample'))));
+		$this->assertFalse($this->run_rules($rules, array_merge($values_base, array('bar' => ' sample'))));
 	}
 
 	public function test_rule_differs()
-	{		
+	{
 		$rules = array(
 			array('field' => 'foo', 'label' => 'label', 'rules' => 'required'),
-			array('field' => 'bar', 'label' => 'label2', 'rules' => 'differs[foo]'));
+			array('field' => 'bar', 'label' => 'label2', 'rules' => 'differs[foo]')
+		);
 		$values_base = array('foo' => 'sample');
-		
-		$this->assertTrue($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => 'does_not_match'))
-				));
-		$this->assertTrue($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => 'Sample'))
-				));
-		$this->assertTrue($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => ' sample'))
-				));
 
-		$this->assertFalse($this->run_rules(
-				$rules,
-				array_merge($values_base, array('bar' => 'sample'))
-				));
+		$this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => 'does_not_match'))));
+		$this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => 'Sample'))));
+		$this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => ' sample'))));
+
+		$this->assertFalse($this->run_rules($rules, array_merge($values_base, array('bar' => 'sample'))));
 	}
 
 	public function test_rule_min_length()
-	{			
+	{
 		$this->assertTrue($this->form_validation->min_length('12345', '5'));
-		$this->assertTrue($this->form_validation->min_length('test', '0'));				
+		$this->assertTrue($this->form_validation->min_length('test', '0'));
 
 		$this->assertFalse($this->form_validation->min_length('123', '4'));
 		$this->assertFalse($this->form_validation->min_length('should_fail', 'A'));
@@ -109,7 +78,7 @@
 	}
 
 	public function test_rule_max_length()
-	{				
+	{
 		$this->assertTrue($this->form_validation->max_length('', '4'));
 		$this->assertTrue($this->form_validation->max_length('1234', '4'));
 
@@ -118,8 +87,8 @@
 	}
 
 	public function test_rule_exact_length()
-	{		
-		$this->assertTrue($this->form_validation->exact_length('1234', '4'));		
+	{
+		$this->assertTrue($this->form_validation->exact_length('1234', '4'));
 
 		$this->assertFalse($this->form_validation->exact_length('', '3'));
 		$this->assertFalse($this->form_validation->exact_length('12345', '4'));
@@ -129,7 +98,6 @@
 
 	public function test_rule_greater_than()
 	{
-		// Empty input should pass any rule unless required is also specified
 		$this->assertTrue($this->form_validation->greater_than('-10', '-11'));
 		$this->assertTrue($this->form_validation->greater_than('10', '9'));
 
@@ -139,35 +107,35 @@
 	}
 
 	public function test_rule_greater_than_equal_to()
-	{		
-		$this->assertTrue($this->form_validation->greater_than_equal_to('0', '0'));		
+	{
+		$this->assertTrue($this->form_validation->greater_than_equal_to('0', '0'));
 		$this->assertTrue($this->form_validation->greater_than_equal_to('1', '0'));
 
-		$this->assertFalse($this->form_validation->greater_than_equal_to('-1', '0'));		
+		$this->assertFalse($this->form_validation->greater_than_equal_to('-1', '0'));
 		$this->assertFalse($this->form_validation->greater_than_equal_to('10a', '0'));
 	}
 
 	public function test_rule_less_than()
-	{		
+	{
 		$this->assertTrue($this->form_validation->less_than('4', '5'));
 		$this->assertTrue($this->form_validation->less_than('-1', '0'));
 
 		$this->assertFalse($this->form_validation->less_than('4', '4'));
-		$this->assertFalse($this->form_validation->less_than('10a', '5'));		
+		$this->assertFalse($this->form_validation->less_than('10a', '5'));
 	}
 
 	public function test_rule_less_than_equal_to()
-	{				
+	{
 		$this->assertTrue($this->form_validation->less_than_equal_to('-1', '0'));
 		$this->assertTrue($this->form_validation->less_than_equal_to('-1', '-1'));
 		$this->assertTrue($this->form_validation->less_than_equal_to('4', '4'));
 
 		$this->assertFalse($this->form_validation->less_than_equal_to('0', '-1'));
-		$this->assertFalse($this->form_validation->less_than_equal_to('10a', '0'));		
+		$this->assertFalse($this->form_validation->less_than_equal_to('10a', '0'));
 	}
 
 	public function test_rule_in_list()
-	{				
+	{
 		$this->assertTrue($this->form_validation->in_list('red', 'red,Blue,123'));
 		$this->assertTrue($this->form_validation->in_list('Blue', 'red,Blue,123'));
 		$this->assertTrue($this->form_validation->in_list('123', 'red,Blue,123'));
@@ -178,7 +146,7 @@
 	}
 
 	public function test_rule_alpha()
-	{				
+	{
 		$this->assertTrue($this->form_validation->alpha('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ'));
 
 		$this->assertFalse($this->form_validation->alpha('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ '));
@@ -187,7 +155,7 @@
 	}
 
 	public function test_rule_alpha_numeric()
-	{				
+	{
 		$this->assertTrue($this->form_validation->alpha_numeric('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789'));
 
 		$this->assertFalse($this->form_validation->alpha_numeric('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789\ '));
@@ -195,21 +163,21 @@
 	}
 
 	public function test_rule_alpha_numeric_spaces()
-	{			
+	{
 		$this->assertTrue($this->form_validation->alpha_numeric_spaces(' abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789'));
 
 		$this->assertFalse($this->form_validation->alpha_numeric_spaces(' abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789_'));
 	}
 
 	public function test_rule_alpha_dash()
-	{				
+	{
 		$this->assertTrue($this->form_validation->alpha_dash('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789-_'));
 
 		$this->assertFalse($this->form_validation->alpha_dash('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789-_\ '));
 	}
 
 	public function test_rule_numeric()
-	{				
+	{
 		$this->assertTrue($this->form_validation->numeric('0'));
 		$this->assertTrue($this->form_validation->numeric('12314'));
 		$this->assertTrue($this->form_validation->numeric('-42'));
@@ -219,7 +187,7 @@
 	}
 
 	public function test_rule_integer()
-	{			
+	{
 		$this->assertTrue($this->form_validation->integer('0'));
 		$this->assertTrue($this->form_validation->integer('42'));
 		$this->assertTrue($this->form_validation->integer('-1'));
@@ -230,7 +198,7 @@
 	}
 
 	public function test_rule_decimal()
-	{				
+	{
 		$this->assertTrue($this->form_validation->decimal('1.0'));
 		$this->assertTrue($this->form_validation->decimal('-0.98'));
 
@@ -241,7 +209,7 @@
 	}
 
 	public function test_rule_is_natural()
-	{			
+	{
 		$this->assertTrue($this->form_validation->is_natural('0'));
 		$this->assertTrue($this->form_validation->is_natural('12'));
 
@@ -250,7 +218,7 @@
 	}
 
 	public function test_rule_is_natural_no_zero()
-	{			
+	{
 		$this->assertTrue($this->form_validation->is_natural_no_zero('42'));
 
 		$this->assertFalse($this->form_validation->is_natural_no_zero('0'));
@@ -259,24 +227,24 @@
 	}
 
 	public function test_rule_valid_url()
-	{		
+	{
 		$this->assertTrue($this->form_validation->valid_url('www.codeigniter.com'));
 		$this->assertTrue($this->form_validation->valid_url('http://codeigniter.eu'));
-				
+
 		$this->assertFalse($this->form_validation->valid_url('htt://www.codeIgniter.com'));
 		$this->assertFalse($this->form_validation->valid_url(''));
 		$this->assertFalse($this->form_validation->valid_url('code igniter'));
 	}
 
 	public function test_rule_valid_email()
-	{			
+	{
 		$this->assertTrue($this->form_validation->valid_email('email@sample.com'));
 
 		$this->assertFalse($this->form_validation->valid_email('valid_email', '@sample.com'));
 	}
 
 	public function test_rule_valid_emails()
-	{			
+	{
 		$this->assertTrue($this->form_validation->valid_emails('1@sample.com,2@sample.com'));
 		$this->assertTrue($this->form_validation->valid_emails('email@sample.com'));
 
@@ -285,7 +253,7 @@
 	}
 
 	public function test_rule_valid_ip()
-	{				
+	{
 		$this->assertTrue($this->form_validation->valid_ip('127.0.0.1'));
 		$this->assertTrue($this->form_validation->valid_ip('127.0.0.1', 'ipv4'));
 		$this->assertTrue($this->form_validation->valid_ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334'));
@@ -298,22 +266,22 @@
 	}
 
 	public function test_rule_valid_base64()
-	{				
+	{
 		$this->assertTrue($this->form_validation->valid_base64(base64_encode('string')));
 
 		$this->assertFalse($this->form_validation->valid_base64('FA08GG'));
 	}
-	
+
 	public function test_set_data()
 	{
 		// Reset test environment
-		$_POST = array();  
+		$_POST = array();
 		$this->form_validation->reset_validation();
 		$data = array('field' => 'some_data');
 		$this->form_validation->set_data($data);
 		$this->form_validation->set_rules('field', 'label', 'required');
 		$this->assertTrue($this->form_validation->run());
-		
+
 		// Test with empty array
 		$_POST = array();
 		$this->form_validation->reset_validation();
@@ -322,9 +290,9 @@
 		// This should do nothing. Old data will still be used
 		$this->form_validation->set_data(array());
 		$this->form_validation->set_rules('field', 'label', 'required');
-		$this->assertTrue($this->form_validation->run());		
+		$this->assertTrue($this->form_validation->run());
 	}
-	
+
 	public function test_set_message()
 	{
 		// Reset test environment
@@ -340,24 +308,29 @@
 		);
 		$errorless_data = array('req_field' => 'some text');
 		$erroneous_data = array('req_field' => '');
-		
+
 		$this->form_validation->set_message('required', $err_message);
 		$this->form_validation->set_data($erroneous_data);
-		$this->form_validation->set_rules($rules);		
+		$this->form_validation->set_rules($rules);
 		$this->form_validation->run();
 		$this->assertEquals('<p>'.$err_message.'</p>', $this->form_validation->error('req_field'));
-		
+
 		$this->form_validation->reset_validation();
 		$this->form_validation->set_message('required', $err_message);
 		$this->form_validation->set_data($errorless_data);
 		$this->form_validation->set_rules($rules);
 		$this->form_validation->run();
-		$this->assertEquals('', $this->form_validation->error('req_field'));		
+		$this->assertEquals('', $this->form_validation->error('req_field'));
 	}
 
+	/**
+	 * Run rules
+	 *
+	 * Helper method to set rules and run them at once, not
+	 * an actual test case.
+	 */
 	public function run_rules($rules, $values)
 	{
-//        $this->markTestSkipped('Not designed to be a unit test');
 		$this->form_validation->reset_validation();
 		$_POST = array();
 
@@ -366,8 +339,7 @@
 		{
 			$_POST[$field] = $value;
 		}
-		
+
 		return $this->form_validation->run();
 	}
-
 }
